在說到Service Mesh
(服務網格)之前,前段時間最火紅的應該就是屬於MicroService
(微服務),因此我們今天來探討有關於MicroService
跟Service Mesh
差別在哪,以及在開發上有哪些觀念有許多的差異性。
MicroService
在討論的時候,有許許多多的人會把它跟Container
(容器化)劃上等號,但實際上不必然。一個系統有嚴密的模組化,有將每個模組的Business Logic
(商業邏輯)切割開來,用上Domain Driven Design
(領域驅動設計),廣泛來說這些模組都可以算是MicroService
。
不過我們系列的重點是放在Service Mesh
以及Kubernetes
的使用,因此我們還是得討論使用Container技術的MicroService
。
加上Container的MicroService
,究竟有什麼魔力讓許許多多的工程師,前撲後繼的往這個方向探索,簡單來說利用Container的技術,我們可以做到服務的獨立且快速部署
,服務運行時的環境一致性
以及快速的擴充
。但是當Container越來越多,越來越難以管理,還要負責維護許多Middleware,來保證整個MicroService可以長期穩定運行,例如Service Discovery
、Service Monitor
、Service Deployment
...等等,所以後面出現了一個好用且很潮的管理工具Kubernetes
。
Kubernetes
的出現,讓許多開發者眼睛為之一亮,這個工具提供了眾多的套件,以及管理Container的Life Cycle,如果對於Kubernetes有許多興趣的可以移駕去旁邊棚,那邊有許多大神級的人物。我這邊就不多贅述,直接往今天的主題Service Mesh
前進。
有了Kubernetes
為什麼我們還要使用Service Mesh
的架構?在Kubernetes大多人都會使用NameSpace
或者是Cluster
去區隔環境或者是服務,甚至有許多混合雲
以及External Service
的多種應用,這樣對於只懂開發的工程師來說,非常痛苦,除了要懂開發程式,還要知道服務之間的各種連接?還要能正確地將服務接上?
以及如果要更改連線上的設定,還要從程式碼修改
,雖然已經MicroService and Container,可以快速部署
但還是需要花費非常高的成本
去進行維護
,所以我們採用Sidecar Pattern
的概念,使用Istio
提供的Envoy Proxy
去做到Service To Service
,減低對服務本身程式碼維護的衝擊。
希望能透過這個系列,讓大家能夠更了解MicroService到Service Mesh的發展,後面會再詳細提到Kubernetes上Istio運作的模式
。
圖片來源:
Pattern: Service Mesh
What is Kubernetes
Out of the Clouds onto the Ground: How to Make Kubernetes Production Grade Anywhere